/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.una.scece.gestores;

import com.una.scece.clases.Persona;
import com.una.scece.conexion.Conexion;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Erick
 */
public class gestorPersona {

    private static PreparedStatement stmt = null;
    private static ResultSet rs = null;
    private static Connection conn = null;
    private static Conexion cx = new Conexion();

    /**
     * @param persona Objeto para trabajar en la base de datos. Ademas de
     * guardar los datos de la persona(Estudiante) dentro de la base de datos
     */
    public static void guardarPersona(Persona persona) throws Exception {
        conn = cx.conectar();
        stmt = conn.prepareStatement("call agregarPersona(?,?,?,?,?,?,?,?,?)");
        stmt.setString(1, persona.getIdentificacion());
        stmt.setString(2, persona.getNombre());
        stmt.setDate(3, persona.getFechaNacimiento());
        stmt.setString(4, persona.getTelefonoHabitacion());
        stmt.setString(5, persona.getTelefonoOficina());
        stmt.setString(6, persona.getTelefonoCelular());
        stmt.setString(7, persona.getCorreoElectronico());
        stmt.setString(8, persona.getDireccion());
        stmt.setInt(9, persona.getTipo());
        stmt.executeUpdate();
        stmt.close();
    }

    /**
     * @param persona Objeto para trabajar en la base de datos. Ademas de
     * actualizar los datos de la persona dentro de la base de datos
     */
    public static void actualizarPersona(Persona persona) throws Exception {
        conn = cx.conectar();
        stmt = conn.prepareStatement("call actualizarPersona(?,?,?,?,?,?,?,?)");
        stmt.setString(1, persona.getIdentificacion());
        stmt.setString(2, persona.getNombre());
        stmt.setDate(3, persona.getFechaNacimiento());
        stmt.setString(4, persona.getTelefonoHabitacion());
        stmt.setString(5, persona.getTelefonoOficina());
        stmt.setString(6, persona.getTelefonoCelular());
        stmt.setString(7, persona.getCorreoElectronico());
        stmt.setString(8, persona.getDireccion());
        stmt.executeUpdate();
        stmt.close();
    }

    /**
     * @param persona Objeto para trabajar en la base de datos. Ademas de
     * guardar los datos de la persona dentro de la base de datos
     */
    public static void buscarPersona(Persona persona) throws Exception {
        conn = cx.conectar();
        stmt = conn.prepareStatement("call buscarPersona(?)");
        stmt.setString(1, persona.getIdentificacion());
        rs = stmt.executeQuery();
        rs.next();
        persona.setIdentificacion(rs.getString("identificacion"));
        persona.setNombre(rs.getString("nombre_completo"));
        persona.setFechaNacimiento(rs.getDate("fecha_nacimiento"));
        persona.setTelefonoHabitacion(rs.getString("telefono_habitacion"));
        persona.setTelefonoOficina(rs.getString("telefono_oficina"));
        persona.setTelefonoCelular(rs.getString("telefono_celular"));
        persona.setDireccion(rs.getString("direccion"));
        persona.setCorreoElectronico(rs.getString("correo_electronico"));
        rs.close();
        stmt.close();
    }

    public static void eliminarPersona(Persona persona) throws Exception {
        conn = cx.conectar();
        stmt = conn.prepareStatement("call eliminarPersona(?)");
        stmt.setString(1, persona.getIdentificacion());
        stmt.executeUpdate();
        stmt.close();
    }

    /**
     *
     * @return Lista con los estudiantes existentes dentro del Sistema
     * @throws Exception
     */
    public static ArrayList<Persona> listarPersonaTipo(int pTipo) throws Exception {
        ArrayList<Persona> lista = new ArrayList<Persona>();
        conn = cx.conectar();
        stmt = conn.prepareStatement("CALL listarPersonasTipo(?)");
        stmt.setInt(1, pTipo);
        rs = stmt.executeQuery();
        while (rs.next()) {
            Persona persona = new Persona();
            persona.setIdentificacion(rs.getString("identificacion"));
            persona.setNombre(rs.getString("nombre_completo"));
            persona.setFechaNacimiento(rs.getDate("fecha_nacimiento"));
            persona.setTelefonoHabitacion(rs.getString("telefono_habitacion"));
            persona.setTelefonoOficina(rs.getString("telefono_oficina"));
            persona.setTelefonoCelular(rs.getString("telefono_celular"));
            persona.setDireccion(rs.getString("direccion"));
            persona.setCorreoElectronico(rs.getString("correo_electronico"));
            lista.add(persona);
        }
        rs.close();
        stmt.close();
        return lista;
    }
}
